package com.aidex.biz.service.impl;

import java.util.List;
import java.util.Map;
import java.util.UUID;

import com.aidex.biz.domain.XiansuoChengbenLog;
import com.aidex.biz.service.XiansuoChengbenLogService;
import com.aidex.common.annotation.DataScope;
import com.github.pagehelper.PageInfo;
import com.aidex.common.core.domain.entity.SysUser;
import com.aidex.common.core.domain.entity.SysDept;
import com.aidex.common.core.service.BaseServiceImpl;
import com.aidex.framework.cache.DeptUtils;
import com.aidex.framework.cache.UserUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;
import com.aidex.biz.mapper.XiansuoChengbenMapper;
import com.aidex.biz.domain.XiansuoChengben;
import com.aidex.biz.service.XiansuoChengbenService;
import org.springframework.transaction.annotation.Transactional;
import com.aidex.common.utils.NumberUtils;

/**
 * 线索成本设置Service业务层处理
 *
 * @author sean
 * @email 2074844820@qq.com
 * @date 2024-01-30
 */
@Service
@Transactional(readOnly = true)
public class XiansuoChengbenServiceImpl extends BaseServiceImpl<XiansuoChengbenMapper, XiansuoChengben> implements XiansuoChengbenService {
    private static final Logger log = LoggerFactory.getLogger(XiansuoChengbenServiceImpl.class);
    @Autowired
    private XiansuoChengbenLogService xiansuoChengbenLogService;

    /**
     * 获取单条数据
     *
     * @param xiansuoChengben 线索成本设置
     * @return 线索成本设置
     */
    @Override
    public XiansuoChengben get(XiansuoChengben xiansuoChengben) {
        XiansuoChengben dto = super.get(xiansuoChengben);
        return dto;
    }

    /**
     * 获取单条数据
     *
     * @param id 线索成本设置id
     * @return 线索成本设置
     */
    @Override
    public XiansuoChengben get(String id) {
        XiansuoChengben dto = super.get(id);
        return dto;
    }


    /**
     * 查询线索成本设置列表
     *
     * @param xiansuoChengben 线索成本设置
     * @return 线索成本设置
     */
    @Override
    @DataScope(userAlias = "a", deptAlias = "a")
    public List<XiansuoChengben> findList(XiansuoChengben xiansuoChengben) {
        return super.findList(xiansuoChengben);
    }

    /**
     * 分页查询线索成本设置列表
     *
     * @param xiansuoChengben 线索成本设置
     * @return 线索成本设置
     */
    @Override
    @DataScope(userAlias = "a", deptAlias = "a")
    public PageInfo<XiansuoChengben> findPage(XiansuoChengben xiansuoChengben) {
        return super.findPage(xiansuoChengben);
    }

    /**
     * 保存线索成本设置
     *
     * @param xiansuoChengben
     * @return 结果
     */
    @Override
    public boolean save(XiansuoChengben xiansuoChengben) {
        return super.save(xiansuoChengben);
    }


    /**
     * 删除线索成本设置信息
     *
     * @param xiansuoChengben
     * @return 结果
     */
    @Override
    public boolean remove(XiansuoChengben xiansuoChengben) {
        return super.remove(xiansuoChengben);
    }

    /**
     * 批量删除线索成本设置
     *
     * @param ids 需要删除的线索成本设置ID
     * @return 结果
     */
    @Transactional(readOnly = false)
    @Override
    public int deleteXiansuoChengbenByIds(String[] ids) {
        return mapper.deleteXiansuoChengbenByIds(ids);
    }

    /**
     * 获取最大编号
     *
     * @param xiansuoChengben 线索成本设置
     * @return 结果
     */
    @Override
    public int findMaxSort(XiansuoChengben xiansuoChengben) {
        return NumberUtils.nextOrder(mapper.findMaxSort(xiansuoChengben));
    }

    /**
     * 城市+来源 唯一性校验
     *
     * @param xiansuoChengben
     * @return
     */
    public XiansuoChengben findExist(XiansuoChengben xiansuoChengben) {
        return mapper.findExist(xiansuoChengben);
    }

    @Override
    public int addBatch(List<XiansuoChengben> xiansuoChengbenList) {
        for (XiansuoChengben xiansuoChengben : xiansuoChengbenList) {
            XiansuoChengben exist = this.findExist(xiansuoChengben);
            if (null != exist) {
                exist.setAmount(xiansuoChengben.getAmount());
                this.save(exist);
            } else {
                int maxSort = this.findMaxSort(xiansuoChengben);
                String id = UUID.randomUUID().toString();
                xiansuoChengben.setId(id);
                xiansuoChengben.setIsNewRecord();
                xiansuoChengben.setSort(maxSort);
                this.save(xiansuoChengben);

                XiansuoChengbenLog xiansuoChengbenLogParam = new XiansuoChengbenLog();
                xiansuoChengbenLogParam.setXscbId(id);
                xiansuoChengbenLogParam.setCityName(xiansuoChengben.getCity());
                xiansuoChengbenLogParam.setLaiyuan(xiansuoChengben.getLaiyuan());
                xiansuoChengbenLogParam.setLaiyuanType(xiansuoChengben.getLaiyuanType());
                xiansuoChengbenLogParam.setCost(xiansuoChengben.getAmount());
                xiansuoChengbenLogParam.setRemark("成本补录");
                xiansuoChengbenLogParam.setIsSum(1);
                xiansuoChengbenLogParam.preUpdate();
                xiansuoChengbenLogService.updateNoCostData(xiansuoChengbenLogParam);
                // 更新之前由于未设置成本单价，而成本为0 的 线索成本记录

            }
        }
        return xiansuoChengbenList.size();
    }
}
